package qualomelhor.database;

import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;

import javax.persistence.Id;
import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Indexed;
import com.googlecode.objectify.annotation.Serialized;

import java.io.Serializable;

@Entity
public class Categoria implements Serializable {

		private static final long serialVersionUID = 0;

		@Id
	    private Long id; 

	    @Indexed
	    private String nomeCategoria;

	    private Boolean translate;

	    @Indexed
	    private Long categoriaPai;

	    @Indexed
	    private byte nivel;

	    private String enderecoFotoCategoria;

	    private String enderecoIcon;

	    @Indexed
	    private int ordem;

	    private boolean bloqueado;

	    @Serialized      //key = locale, value = Nome / path
	    private HashMap<String, String[]> mapPath_Name;

	    private Date dataInclusao;

	    public Categoria() {

	    }

	    public Categoria(String nomeCategoria, boolean translate, Long categoriaPai, byte nivel, String enderecoFotoCategoria, String enderecoIcon, int ordem, Date dataInclusao) {
	    	this.nomeCategoria = nomeCategoria;
	    	this.translate = translate;
	    	this.categoriaPai = categoriaPai;
	    	this.nivel = nivel;
	    	this.enderecoFotoCategoria = enderecoFotoCategoria;
	    	this.enderecoIcon = enderecoIcon;
	    	this.ordem = ordem;
	        this.bloqueado = false;
	        this.dataInclusao = dataInclusao;
	        this.mapPath_Name = new HashMap<String, String[]>(0);
	    }

	    public Long getId() { 
	        return id; 
	    } 

	    public String getNomeCategoria() { 
	        return nomeCategoria;
	    }

	    public Boolean getTranslate() {
	    	return translate;
	    }

	    public Long getCategoriaPai() { 
	        return categoriaPai;
	    }
    
	    public byte getNivel() {
	    	return nivel;
	    }

	    public String getEnderecoFotoCategoria() {
	    	return enderecoFotoCategoria;
	    }

	    public String getEnderecoIcon() {
	    	return enderecoIcon;
	    }

	    public int getOrdem() {
	    	return ordem;
	    }

	    public boolean getBloqueado() {
	    	return bloqueado;
	    }

	    public HashMap<String, String[]> getMapPath() {
	    	return mapPath_Name;
	    }

	    public Date getDataInclusao() { 
	        return dataInclusao; 
	    }

	    public void setId(Long id) {
	    	this.id = id;
	    }

	    public void setNomeCategoria(String nomeCategoria) {
	    	this.nomeCategoria = nomeCategoria;
	    }

	    public void setTranslate(boolean translate) {
	    	this.translate = translate;
	    }

	    public void setCategoriaPai(Long idCategoriaPai) {
	    	this.categoriaPai = idCategoriaPai;
	    }
	    
	    public void setNivel(byte nivel) {
	    	this.nivel = nivel;
	    }

	    public void setEnderecoFotoCategoria(String enderecoFotoCategoria) {
	    	this.enderecoFotoCategoria = enderecoFotoCategoria;
	    }

	    public void setEnderecoIcon(String enderecoIcon) {
	    	this.enderecoIcon = enderecoIcon;
	    }

	    public void setOrdem(int ordem) {
	    	this.ordem = ordem;
	    }

	    public void setBloqueado(boolean bloqueado) {
	    	this.bloqueado = bloqueado;
	    }

	    public void setMapPath_Name(HashMap<String, String[]> mapPath_Name) {
	    	this.mapPath_Name = mapPath_Name;
	    }

	    public void setDataInclusao(Date dataInclusao) { 
	        this.dataInclusao = dataInclusao; 
	    }

	    // retorna o path do locale ou o nome caso senha um locale que nao existe ainda
	    public String getPathCategoria(String locale) {
	    	String path[] = getMapPath().get(locale);
	    	String result;
	    	if (path == null) {
	    		result = getMapPath().get("default")[0];
	    	} else {
	    		result = path[0];
	    	}
	    	return result;
	    }

	    public String getNomeCategoria(String locale) {
	    	String result;
	    	if (getTranslate()) {
	    		String[] path = getMapPath().get(locale);
		    	if (path == null) {
		    		result = getMapPath().get("default")[1];
		    	} else {
		    		result = path[1];
		    	}
	    	} else {
	    		result = getNomeCategoria();
	    	}
	    	return result;
	    }

	    public HashMap<String, String> getLocale_Name() {
	    	HashMap<String, String> result = new HashMap<String, String>(0);

	    	Iterator<Entry<String, String[]>> it = getMapPath().entrySet().iterator();
			while (it.hasNext()) {
				Entry<String, String[]> entry = it.next();
				String locale = entry.getKey();
				String name = entry.getValue()[1];
				result.put(locale, name);
			}
			return result;
	    }
}